﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows.Forms;


namespace FAS.Objetos
{
    public class Examen: IFas
    {
        
        #region Atributos
        public string Clave { get; set; }
        public int Parcial { get; set; }
        public  IList<Problema> Problemas { get; set; }
        public int idMateria { get; set; }
        public string Periodo { get; set; }
        public string pdf { get; set; }
        private ConexionMySQL conexion = new ConexionMySQL();
        #endregion

        #region Constructor
        public Examen() { }

        public Examen( int parcial, IList<Problema> problemas, string periodo, int idmateria, string pdf, int num)
        {
            this.Parcial=parcial;
            this.Problemas = problemas;
            this.idMateria= idmateria;

            string claveMateria=Materia.GetNombre(idmateria);
            this.Periodo = periodo;
            this.pdf = pdf;
            this.Clave = ""+claveMateria+this.Periodo+this.Parcial+num+getId();
            insertar();
        }
        #endregion

        #region Metodos
        public Examen GetExamen(string clave)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `Examen` where Clave = '" + clave + "'");
            Examen examen = new Examen();
            examen.Clave = clave;
            examen.Parcial = int.Parse(data.Tables[0].Rows[0]["Parcial"].ToString());
            examen.pdf = data.Tables[0].Rows[0]["pdf"].ToString();
            examen.Problemas = getProblemas(clave);
            return examen;
        }
        private int getId()
        {
            String str = "select count(Clave) as c from examen";
            ConexionMySQL conexion = new ConexionMySQL();
            DataRow data = conexion.GetQuery(str).Tables[0].Rows[0];
            int id = int.Parse(data[0].ToString());
            return id;
        }
        public IList<Problema> getProblemas(string clave)
        {
            IList<Problema> problemas = null;
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `ExamenProblema` where Clave = '" + clave + "'");
            foreach (DataRow r in data.Tables[0].Rows)
            {
                Problema p = new Problema();
                problemas.Add(Problema.GetProblema(int.Parse(r["IdProblema"].ToString())));
            }
            return problemas;
        }


        public IList<int> GetClave()
        {
            IList<int> respuestas = new List<int>();
            int problema = 1;
            foreach(Problema p in this.Problemas){
                int opcion = 1;
                foreach(Opcion o in p.Opciones){
                    if (!o.Respuesta)
                        opcion++;
                }
                respuestas[problema] = opcion;
                problema++;
            }
            return respuestas;
        }


        public Dictionary<string, object> getAtributos()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("ClaveP", Clave);
            diccionario.Add("ParcialP", Parcial);
            diccionario.Add("IdMateriaP", idMateria);
            diccionario.Add("PeriodoP", Periodo);
            diccionario.Add("pdfP", pdf);
            return diccionario;
        }

        public Dictionary<string, object> getAtributosInsertar()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("ClaveP", Clave);
            diccionario.Add("ParcialP", Parcial);
            diccionario.Add("PeriodoP", Periodo);
            diccionario.Add("IdMateriaP", idMateria);
            diccionario.Add("pdfP", pdf);
            return diccionario;
        }

        public bool update()
        {

            return conexion.AccionesDB(getAtributos(), "UpdateExamen");
        }

        public bool delete()
        {
            return conexion.AccionesDB(getAtributos(), "DeleteExamen");
        }

        public int insertar()
        {
            conexion.insertar(getAtributos(), "InsertarExamen"); 
            foreach (Problema p in this.Problemas)
            {
                Dictionary<string, object> d = new Dictionary<string, object>();
                d.Add("ClaveP",this.Clave);
                d.Add("IdProblemaP",p.IdProblema);
                conexion.insertar(d,"InsertarProblemaExamen");
            }
            return 1;
        }
        #endregion




        internal static Examen getExamen(string clave)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `examen` where Clave= '" + clave + "'");
            Examen examen= new Examen();
            examen.Clave = clave;
            examen.idMateria = int.Parse(data.Tables[0].Rows[0]["IdMateria"].ToString());
            examen.Periodo = (data.Tables[0].Rows[0]["Periodo"].ToString());
            examen.pdf = (data.Tables[0].Rows[0]["pdf"].ToString());
            examen.Parcial = int.Parse(data.Tables[0].Rows[0]["Parcial"].ToString());
            DataSet ds = new ConexionMySQL().GetQuery("SELECT * FROM `examenproblema` where Clave= '" + clave + "'");
            List<Problema> lst = new List<Problema>();
            foreach(DataRow row in ds.Tables[0].Rows)
                lst.Add(Problema.GetProblema(int.Parse(row[1].ToString())));
            examen.Problemas = lst;
            return examen;
        }
    }
}
